package org.xx.armory.config.log4j2;

import org.xx.armory.config.NamedSection;

import static org.xx.armory.commons.Validators.notBlank;

public abstract class AppenderSection
        implements NamedSection {
    private String name;
    private boolean enabled;
    private String level;
    private String layout;
    private String marker;

    protected AppenderSection() {
        this.name = "";
        this.enabled = true;
        this.level = "INFO";
        this.layout = "%d{yyyy-MM-dd HH:mm:ss} [%-5p] %C (%F:%L) - %m%n";
        this.marker = "";
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public final String getName() {
        return this.name;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public final void setName(
            String value
    ) {
        this.name = value;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public boolean isEnabled() {
        return this.enabled;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void setEnabled(
            boolean enabled
    ) {
        this.enabled = enabled;
    }

    /**
     * 获取记录器的级别。
     *
     * @return 记录器的级别。
     */
    public final String getLevel() {
        return level;
    }

    public final void setLevel(
            String value
    ) {
        this.level = notBlank(value, "value").trim().toUpperCase();
    }

    /**
     * 获取记录器的输出格式。
     *
     * @return 记录器的输出格式。
     */
    public final String getLayout() {
        return this.layout;
    }

    public final void setLayout(
            String value
    ) {
        this.layout = value;
    }

    /**
     * 获取记录器匹配的Marker。
     * <p>如果未指定Marker，则该记录器记录所有的日志，否则只记录具有指定Marker的日志。</p>
     *
     * @return 记录器匹配的Marker。
     */
    public final String getMarker() {
        return this.marker;
    }

    public final void setMarker(
            String value
    ) {
        this.marker = value;
    }
}
